#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <assert.h>
//int my_strcmp(const char* p1, const char* p2)
//{
//	assert(p1 && p2);
//	while (*p1 && *p2 && *p1 == *p2)p1++, p2++;
//	return *p1 - *p2;
//}
//int main()
//{
//	char ch1[20] = "abcde";
//	char ch2[20] = "abcdef";
//	if (my_strcmp(ch1, ch2) > 0)
//		printf(">\n");
//	else if (my_strcmp(ch1, ch2) < 0)
//		printf("<\n");
//	else
//		printf("=\n");
//	return 0;
//}


//const char* my_strstr(const char* p1, const char* p2)
//{
//	assert(p1 && p2);
//	if (*p2 == 0)return p1;
//	const char* ret = p1;
//	const char* s2 = p2;
//	while (*ret && *ret != *s2)
//	{
//		ret++;
//		if (*ret == *s2)
//		{
//			const char* s1 = ret;
//			while (*s1 && *s2 && *s1 == *s2)s1++, s2++;
//			if (*s2 == 0)return ret;
//			ret++;
//		}
//	}
//	return NULL;
//}
//int main()
//{
//	char ch1[20] = "Hello World!";
//	char ch2[20] = "World";
//	char* pc = my_strstr(ch1, ch2);
//	assert(pc);
//	printf(pc);
//	return 0;
//}


//char* my_strncpy(char* dst, const char* src, size_t num)
//{
//	assert(dst && src);
//	char* ret = dst;
//	while (*src && num)
//	{
//		*dst++ = *src++;
//		num--;
//	}
//	while (num--)*dst++ = 0;
//	return ret;
//}
//int main()
//{
//	char ch1[] = "He\0llo World!";
//	char ch2[20];
//	my_strncpy(ch2, ch1, 12);
//	printf(ch2);
//	return 0;
//}


//char* my_strncat(char* dst, const char* src, size_t num)
//{
//	assert(dst && src);
//	char* ret = dst;
//	while (*dst)dst++;
//	while (*src && num--)*dst++ = *src++;
//	*dst = 0;
//	return ret;
//}
//int main()
//{
//	char ch1[20] = "Hello ";
//	char ch2[] = "World!aaaaaaaaaaaaaaaa";
//	my_strncat(ch1, ch2, 6);
//	printf(ch1);
//	return 0;
//}


//void* my_memcpy(void* dst, const void* src, size_t num)
//{
//	assert(dst && src);
//	void* ret = dst;
//	while (num--)*((char*)dst)++ = *((char*)src)++;
//	return ret;
//}
//int main()
//{
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[10] = { 0 };
//	my_memcpy(arr2, arr1, 5 * sizeof(int));
//	for (int i = 0; i < 5; i++)printf("%d ", arr2[i]);
//	return 0;
//}


void* my_memmove(void* dst, const void* src, size_t num)
{
	assert(dst && src);
	void* ret = dst;
	if (dst < src)
	{
		while (num--)*((char*)dst)++ = *((char*)src)++;
		return ret;
	}
	else
	{
		while (num--)*(((char*)dst) + num) = *(((char*)src) + num);
		return ret;
	}
}
int main()
{
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	my_memmove(arr1 + 3, arr1, 5 * sizeof(int));
	for (int i = 0; i < 10; i++)printf("%d ", arr1[i]);
	return 0;
}